package util

import (
	"fmt"
	"os"
)

// 确保目录存在，不存在则创建（原子性检查与创建，增强错误处理）
func EnsureDir(dir string) error {
	// 使用同步标志位（避免多次检查）
	var created bool

	// 尝试创建目录（MkdirAll 是原子操作）
	err := os.MkdirAll(dir, 0755)
	if err != nil {
		// 检查目录是否已存在
		if !os.IsExist(err) {
			return fmt.Errorf("无法创建目录 %s: %v", dir, err)
		}
		created = false
	} else {
		// 成功创建目录
		created = true
	}

	// 验证目录权限
	if !created {
		info, err := os.Stat(dir)
		if err != nil {
			return fmt.Errorf("无法获取目录信息 %s: %v", dir, err)
		}
		// 检查是否为目录
		if !info.IsDir() {
			return fmt.Errorf("路径已存在但不是目录: %s", dir)
		}
		// 检查权限（可选，根据需求决定是否强制修改）
		perm := info.Mode().Perm()
		if perm != 0755 {
			if err := os.Chmod(dir, 0755); err != nil {
				return fmt.Errorf("目录权限不足 %s (当前: %o)，尝试修改为 0755 发生错误: %v", dir, perm, err)
			}
		}
	}
	return nil
}

// 判断文件或目录路径是否存在
func Exists(path string) bool {
	_, err := os.Stat(path)
	if err == nil {
		// 没有错误，说明文件/目录存在
		return true
	}
	// 判断错误是否为文件不存在
	if os.IsNotExist(err) {
		return false
	}
	// 其他错误（如权限问题），这里简单返回 false
	// 实际应用中可能需要根据具体场景处理
	return false
}
